package basis.netease.easy;

import java.util.Scanner;

/**
 * 7-32 走格子问题
 * 一个机器人位于一个m*n网格的左上角 （起始点在下图中标记为 “Start” ）
 * 机器人每次只能向下或者向右移动一步（每个格子只能走一次）
 * 机器人试图达到网格的右下角（在下图中标记为 “Finish” ）
 * 问总共有多少条不同的路径？
 * 输入格式:
 * 每个测试用例输入为一行，用空格隔开，标识为网格的大小，具体形式为：m n
 * 其中，
 * 2<=m<=20
 * 2<=n<=20
 * 输出格式:
 * 对每一组输入，输出路径数量
 * 输入样例:
 * 在这里给出一组输入。例如：
 * 3 3
 * 输出样例:
 * 在这里给出相应的输出。例如：
 * 6
 */
public class Main_24 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        String[] split = input.split(" ");
        int n = Integer.parseInt(split[0]);
        int m = Integer.parseInt(split[1]);
        // 在n*m的格子中，从左上角做到右下角，本质上就是往右走n-1步，往下走m-1步，所以就成了排列组合问题，等价于在(n-1+m-1)个抽屉中放n-1个物品，有几种放法（1个抽屉只能放1个物品）。
        int a = n - 1;
        int b = n - 1 + m - 1;
        int min = Math.min(a, b - a); // 为了减少乘除法次数，选择最小值
        long result = 1;
        for (int i = 1; i <= min; i++) {
            result *= b - (i - 1);
            result /= i;
        }
        System.out.println(result);
    }

}
